home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The PC-SIG Library 9
/
The PC-SIG Library on CD ROM - Ninth Edition.iso
/
1201_300
/
DISK1262
/
DISK1262.ZIP
/
_ENC.D
< prev
next >
Wrap
Text File
|
1988-07-11
|
2KB
|
79 lines
; Doug's Programming Language -- DPL, Version 2.22
; Copyright (c) 1988 Douglas S. Cody, All rights reserved.
;--------------------------------
; _ E N C - CONVERT SIGNED 16 BIT VALUE TO A STRING
;
; Entry conditions:
; AX holds the integer
; DI holds the string
; Exit conditions:
; The target string holds the decimal representation
;
SUBPGM _ENC
;
NUM_TABLE LABEL WORD
DW 10000
DW 1000
DW 100
DW 10
;
BEGIN _ENC
PUSH ES ; SAVE ES
PUSH DS ; & MAKE IT POINT TO OUR DATA SEG
POP ES
MOV BX,'- ' ; PLACE SPACE IN BL FOR POSITIVE #
TEST AX,8000H ; NEGATIVE?
JZ @EN_05 ; NO, CONTNUE ON...
XCHG BL,BH ; MOVE THE NEGATIVE INTO BL
NEG AX ; STRAIGHTEN OUT THE NUMBER
;
@EN_05:
PUSH BX ; SAVE THE SIGN
SUB DH,DH ; CLEAR THE SAVING FLAG
MOV CX,04 ; 4 LOOPS THROUGH THE TABLE
MOV SI,OFFSET NUM_TABLE
CMP AX,8000H ; IS IT A -0?
JNZ @EN_10 ; NO, CONTINUE ON...
DEC AX ; MAKE IT 32767
;
@EN_10:
MOV BX,[SI] ; GET THE NEXT COMPARISON VALUE
ADD SI,2
SUB DL,DL ; DX HOLDS THE DIGIT COUNT
;
@EN_15:
CMP AX,BX ; AX GT THE 10 BASE #?
JL @EN_20 ; NO, MOVE ON...
SUB AX,BX
INC DL ; DL HOLDS THE COUNT
JMP SHORT @EN_15
;
@EN_20:
OR DH,DH ; SAVE?
JNZ @ENC_200 ; YES, GO DO IT
OR DL,DL ; ALREADY ZERO?
JZ @EN_21 ; YES, DON'T SAVE LEADING ZEROS
;
@ENC_200:
ADD DL,'0' ; DL HOLDS THE NEW CHARACTER
MOV [DI],DL ; SAVE THE CHARACTER
INC DI
INC DH ; SET FLAG INDICATING STORAGE IN PROGRESS
;
@EN_21:
LOOP @EN_10 ; CONTINUE TILL ALL IS ENCODED
;
; SAVE THE FINAL DIGIT
;
ADD AL,'0'
STOSB ; SAVE THE LAST CHARACTER
POP AX ; GET THE SIGN
STOSB ; SAVE IN THE STRING
SUB AX,AX
STOSB ; SET THE TERMINATOR
POP ES
RET
ENDPGM _ENC
;